home *** CD-ROM | disk | FTP | other *** search
- #ifndef DATETOK_H__
- #define DATETOK_H__
-
- #define AM 0
- #define PM 1
-
- /* can't have more of these than there are bits in an unsigned long */
- #define MONTH 1
- #define YEAR 2
- #define DAY 3
- #define TIME 4
- #define TZ 5
- #define DTZ 6
- #define IGNORE 7
- #define AMPM 8
- /* below here are unused so far */
- #define SECONDS 9
- #define MONTHS 10
- #define YEARS 11
- #define NUMBER 12
- /* these are only for relative dates */
- #define BEFORE 13
- #define AFTER 14
- #define AGO 15
-
-
- #define SECS(n) ((time_t)(n))
- #define MINS(n) ((time_t)(n) * SECS(60))
- #define HOURS(n) ((time_t)(n) * MINS(60)) /* 3600 secs */
- #define DAYS(n) ((time_t)(n) * HOURS(24)) /* 86400 secs */
- /* months and years are not constant length, must be specially dealt with */
-
- #define TOKMAXLEN 6 /* only this many chars are stored in datetktbl */
-
- /*
- * definitions for squeezing values into low 7 bits of "value" to avoid
- * overflow on extremely picky machines with signed chars.
- * all timezones we care about are divisible by 30, and the largest value
- * (780) when divided is 26, which fits in 5 bits (037), so have a bit to
- * spare(!).
- */
- #define SIGNBIT 0100
- #define VALMASK 037
- #define DIVISOR 30
- #define NEG(n) ((n)|SIGNBIT)
- #define PACK(v) ((v) < 0? NEG((-(v))/DIVISOR): (v)/DIVISOR)
- #define TOVAL(tp, v) ((tp)->value = PACK(v))
- #define SIGNEDCHAR(c) ((c)&SIGNBIT? -((c)&VALMASK): (c))
- #define FROMVAL(tp) (-SIGNEDCHAR((tp)->value) * DIVISOR) /* uncompress */
-
- /* keep this struct small; it gets used a lot */
- typedef struct {
- char token[TOKMAXLEN];
- char type;
- char value; /* this may be unsigned, alas */
- } datetkn;
-
- extern datetkn *datetoktype(/* char *s */);
- extern datetkn *datebsearch(/* char *key, datetkn *base, unsigned int nel */);
-
- #endif /* DATETOK_H__ */ /* Do not add anything after this line */
-